let express = require("express");
const bodyParser = require("body-parser");
// 路由
let reouter = express.Router();
// 加载aes加密解密模块
let { decrypt, key, vi } = require("../aes.js");
// 生成token 寻妖下载包
const jwt = require("jsonwebtoken");
// 加载模型数据库模块
let { users } = require("../config/dbconfig");
//加载权限模型
let { user_router } = require("../config/dbconfig");
//命令
const { exec } = require("child_process");

let { Op } = require("sequelize");

// function getUser(list) {
//   return new Promise(async (resolve, reject) => {
//     let newList = []
//     try {
//       list.forEach(async(item) => {
//          const rs = await user_router.findOne({ where: { id:Number(item) } });
//          list.push(rs)
//       });
//       return resolve(list);
//     } catch (error) {
//       return reject(error);
//     }
//   });
// }

// 模块化路由
reouter.post("/user", bodyParser.json(), async (req, res, next) => {
  // 接收客户端传递过来的账号和密码
  const { username, password } = req.body;
  console.log({ username, password });
  // // 根据用户名来查询数据库是否存在这个用户
  const result = await users.findOne({ where: { username } });
  if (result == null) {
    res.status(400).send({
      data: null,
      meta: {
        msg: "用户名不存在！",
        status: 400,
      },
    });
    return;
  }
  //  获权限
  let getPermissionList = [];
  // 返回权限数组
  let userPermission = result.power.split(",");
  //循环查询权限
  for (const item of userPermission) {
    const result = await user_router.findOne({ where: { id: Number(item) } });
    getPermissionList.push(result);
  }
  // 解密
  let resdecrypt = decrypt(key, vi, result.password);
  // // 判断账号 和 密码 是否正确
  if (username != result.username || password != resdecrypt) {
    res.status(400).send({
      data: null,
      meta: {
        msg: "账号或者密码不正确！",
        status: 400,
      },
    });
    return;
  }
  // // 登陆成功生成 token 返回给客户端 第一个参数 是 组 ，第二个是 私钥（自己随便定义）
  const token = jwt.sign({ username }, "xiaoke");
  //判断是不是管理员和赋予路由权限
  // if (username === "admin") {

  // }

  res.status(200).send({
    data: {
      username: username,
      token,
      router: getPermissionList,
    },
    meta: {
      msg: "登陆成功",
      status: 200,
    },
  });
  // else {
  //   res.status(200).send({
  //     data: {
  //       username: username,
  //       token,
  //     },
  //     meta: {
  //       msg: "登陆成功",
  //       status: 200,
  //     },
  //   });
  // }
});

//token登录获取权限
reouter.post("/tokenLogin", bodyParser.json(), async (req, res, next) => {
  // 接收客户端传递过来的账号和密码
  console.log(102, req.decoded);

  const { username, password } = req.decoded;

  // // 根据用户名来查询数据库是否存在这个用户
  const result = await users.findOne({ where: { username } });

  //  获权限
  let getPermissionList = [];
  // 返回权限数组
  let userPermission = result.power.split(",");
  //循环查询权限
  for (const item of userPermission) {
    const result = await user_router.findOne({ where: { id: Number(item) } });
    getPermissionList.push(result);
  }

  res.status(200).send({
    data: {
      username: username,
      router: getPermissionList,
    },
    meta: {
      msg: "登陆成功",
      status: 200,
    },
  });
});

//获取用户表
reouter.post("/getUser", bodyParser.json(), async (req, res, next) => {
  // const result = await users.findAll({ raw: true })

  const result = await users.findAll({
    where: { username: { [Op.not]: "admin" } },
  });

  res.status(200).send({
    meta: {
      msg: "登陆成功",
      status: 200,
    },
    data: {
      data: result,
    },
  });
});

//修改用户表
reouter.post("/putUser", bodyParser.json(), async (req, res, next) => {
  let data = req.body;
  // 更新sip服务器 端口 密码
  const result = await users.update(data, {
    where: { id: JSON.parse(data.id) },
  });

  res.status(200).send({
    meta: {
      msg: "成功",
      status: 200,
    },
    data: {
      data: result,
    },
  });
});

//获取路由表表
reouter.post("/getRouter", bodyParser.json(), async (req, res, next) => {
  const result = await user_router.findAll({ raw: true });
  res.status(200).send({
    meta: {
      status: 200,
    },
    data: {
      data: result,
    },
  });
});

//重启广播服务
//获取路由表表
reouter.post("/wxdReboot", bodyParser.json(), async (req, res, next) => {
  const { exec } = require("child_process");

  // 执行 ls 命令
  exec("ls -la", (error, stdout, stderr) => {
    if (error) {
      console.error(`执行出错: ${error}`);
      res.status(400).send({
        meta: {
          message: "执行出错",
        },
      });
      return;
    }
    console.log(`stdout: ${stdout}`);
    res.status(200).send({
      meta: {
        message: "服务已重启",
      },
    });
    if (stderr) {
      console.error(`stderr: ${stderr}`);
    }
  });
});

module.exports = reouter;
